// 给定一个整数数组 nums 和一个整数 k ，请返回其中出现频率前 k 高的元素。可以按 任意顺序 返回答案。 

// 示例 1:
// 输入: nums = [1,1,1,2,2,3], k = 2
// 输出: [1,2]

// 1.
var topKFrequent = function (nums, k) {
    let map = new Map()
    for (const num of nums) {
        map.set(num, 1 + (map.get(num) || 0))
    }
    console.log('map:', map)
    let arr = []
    for (const kv of map) {
        arr.push(kv)
    }
    return arr.sort((a, b) => b[1] - a[1]).slice(0, k).map(item => item[0])
};

console.log(topKFrequent([2, 2, 3, 3, 1, 1, 1, 1], 2))

// 2.
var bucket = function (nums, k) {
    let map = new Map()
    for (const num of nums) {
        // key为元素，value为频次
        map.set(num, 1 + (map.get(num) || 0))
    }
    let res = [], bucket = []
    // bucket按频次分桶
    map.forEach((v, k) => {
        if (!bucket[v]) {
            // 如果没该频次的桶，赋值为数组（桶）
            bucket[v] = [k]
        } else {
            // 如果有该频次的桶，数组（桶）里加入新元素
            bucket[v].push(k)
        }
    })
    for (let i = bucket.length - 1; i >= 0 && res.length < k; i--) {
        if (bucket[i]) {
            res.push(...bucket[i])
        }
    }
    return res
};
console.log(bucket([2, 2, 3, 3, 1, 1, 1, 1], 2))
